package com.cloud.class04.test;

import java.util.concurrent.CompletableFuture;

// 来实现边打王者荣耀，边下载其他静态资源的功能，我们创建两个异步任务，
// 一个用于下载资源，另一个用于打王者荣耀。将下载完成将通知用户。
public class CompletableFutureExample {
    //    CompletableFuture是Java8中提供的一个类，用于异步处理任务。
//    CompletableFuture实现了Future和CompletionStage接口，
//    异步执行、链式操作、组合处理、异步处理等是一个处理并发编程强大工具类。
    public static void main(String[] args) {
//创建一个异步任务（CompletableFuture）对象，用于下载资源
        CompletableFuture<Void> downLoadResource = CompletableFuture.runAsync(() -> {
            System.out.println("下载资源");
            try {
                Thread.sleep(5000);//模拟一下下载资源
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
            System.out.println("下载完成");
        });

        //创建一个异步任务（CompletableFuture）对象，用于玩王者荣耀
        CompletableFuture<Void> playGame = CompletableFuture.runAsync(() -> {
            System.out.println("开始打游戏...........");
            try {
                Thread.sleep(10000);//模拟游戏过程
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
            System.out.println("游戏结束");
        });
//        使用thenAccept方法，当下载资源完成后，通知用户
        downLoadResource.thenAccept((Void) -> {
            System.out.println("下载完成，通知用户");
        });
//        allOf方法，等待所有任务完成 join方法，等待所有任务完成阻塞当前线程
        CompletableFuture.allOf(downLoadResource, playGame).join();

    }
}

